﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Twodi.Aspect.Args;

namespace Twodi.Interfaces
{
    /// <summary>
    /// Define um componente que possui posição.
    /// </summary>
    public interface IPosition
    {
        /// <summary>
        /// Posição do componente.
        /// </summary>
        Vector2 Position { get; set; }

        /// <summary>
        /// Posição do componente representada por um "ponto".
        /// </summary>
        Point Point { get; set; }

        /// <summary>
        /// Mover componente. O valor é somado a posição atual.
        /// </summary>
        /// <param name="value">Valor a ser somado</param>
        void Move(Vector2 value);

        /// <summary>
        /// Mover componente. O valor é somado a posição atual.
        /// </summary>
        /// <param name="value">Valor a ser somado</param>
        void Move(Point value);

        /// <summary>
        /// Mover componente. O valor é somado a posição atual.
        /// </summary>
        /// <param name="x">Valor a ser somado em X.</param>
        /// <param name="y">Valor a ser somado em Y.</param>
        void Move(int x = 0, int y = 0);

        /// <summary>
        /// Mover componente. O valor é somado a posição atual.
        /// </summary>
        /// <param name="x">Valor a ser somado em X.</param>
        /// <param name="y">Valor a ser somado em Y.</param>
        void Move(float x = 0, float y = 0);

        /// <summary>
        /// Reseta a posição pro ponto "0,0".
        /// </summary>
        void Reset();

        /// <summary>
        /// Evento invocado quando posição for alterada.
        /// </summary>
        event EventHandler<PositionChangedEventArgs> PositionChanged;
    }
}
